﻿using ExcellentProjectPlus.Aplicacion.Calificaciones.CalificacionParcialEstudiantes;
using ExcellentProjectPlus.Dominio.Calificaciones.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Calificaciones.Controllers
{
    public class CalificacionParcialEstudiantesController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDeCalificacionParcialEstudiantes _servicioDeGestionDeCalificacionParcialEstudiantes;
        #endregion

        #region Constructores
        public CalificacionParcialEstudiantesController(IServicioDeGestionDeCalificacionParcialEstudiantes servicioDeGestionDeCalificacionParcialEstudiantes)
        {
            _servicioDeGestionDeCalificacionParcialEstudiantes = servicioDeGestionDeCalificacionParcialEstudiantes;
        }
        #endregion

        public IEnumerable<CalificacionParcialEstudiante> Get()
        {
            return _servicioDeGestionDeCalificacionParcialEstudiantes.ObtenerCalificacionParcialEstudiantes();
        }

        [ResponseType(typeof(CalificacionParcialEstudiante))]
        public IHttpActionResult GetCalificacionParcialEstudiante(int id)
        {
            CalificacionParcialEstudiante calificacionParcialEstudiante = _servicioDeGestionDeCalificacionParcialEstudiantes.ObtenerCalificacionParcialEstudiantePorId(id);
            if (calificacionParcialEstudiante == null)
            {
                return NotFound();
            }

            return Ok(calificacionParcialEstudiante);
        }

        public IHttpActionResult Put(int id, CalificacionParcialEstudiante calificacionParcialEstudiante)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != calificacionParcialEstudiante.Id)
            {
                return BadRequest();
            }

            _servicioDeGestionDeCalificacionParcialEstudiantes.ModificarCalificacionParcialEstudiante(calificacionParcialEstudiante);

            return StatusCode(HttpStatusCode.NoContent);
        }

        public IHttpActionResult Post(CalificacionParcialEstudiante calificacionParcialEstudiante)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            _servicioDeGestionDeCalificacionParcialEstudiantes.AgregarCalificacionParcialEstudiante(calificacionParcialEstudiante);

            return CreatedAtRoute("DefaultApi", new { id = calificacionParcialEstudiante.IdCurso }, calificacionParcialEstudiante);
        }

        [ResponseType(typeof(CalificacionParcialEstudiante))]
        public IHttpActionResult Delete(int id)
        {
            CalificacionParcialEstudiante calificacionParcialEstudiante = _servicioDeGestionDeCalificacionParcialEstudiantes.ObtenerCalificacionParcialEstudiantePorId(id);
            if (calificacionParcialEstudiante == null)
            {
                return NotFound();
            }

            _servicioDeGestionDeCalificacionParcialEstudiantes.EliminarCalificacionParcialEstudiante(calificacionParcialEstudiante);

            return Ok(calificacionParcialEstudiante);
        }

        [HttpGet()]
        [Route("api/calificacionParcialEstudiantes/GetPagedCalificacionParcialEstudiantes/{pageIndex}/{pageSize}")]
        public IEnumerable<CalificacionParcialEstudiante> GetPagedCalificacionParcialEstudiantes(int pageIndex, int pageSize)
        {
            return _servicioDeGestionDeCalificacionParcialEstudiantes.ObtenerCalificacionParcialEstudiantesPaginado(pageIndex, pageSize);
        }
    }
}
